package Map;

import javax.swing.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Map的遍历
 * Map支持三种遍历方式
 * 遍历所有的key
 * 遍历所有的键值对
 * 遍历所有的value（相对不常用）
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String ,Integer>map=new HashMap<>();
       // Map<String, Integer> map = new HashMap<>();
        /*
        V put（K k,V v）
        将给定的键值对存入Map中。由Map要求key不允许重复，若使用已有的key存入value
        时则为替换value操作。返回值为原value，否则返回值为null

        注：
        如果Map的value是包装类类型时，在接受value值得时候一点用包装类类型的变量
        接受，避免因为自动拆装箱出现的空指针.
         */
        map.put("语文", 99);
        map.put("数学", 92);
        map.put("英语", 89);
        map.put("历史", 87);
        map.put("地理", 95);
        map.put("化学", 91);
        System.out.println(map);
         /*
         遍历所有的key
         Set<K>keySet()
         将当前Map中所有的key以一个Set集合形式返回，遍历该集合等同于遍历所有的key
          */
        Set<String >keySet=map.keySet();
      /*  for (String key:keySet){
            System.out.println("key:"+key);
        }*/
        keySet.forEach(K-> System.out.println(K));

        /*
        遍历每一组键值对
        Set<Entry>entrySet()
        将当前Map中每一组键值对以一个Entry实例保存并最终存入Set集合后返回.
        java.util.Map.Entry
        Entry的每一个实例表示一组键值对。提供了两个常用方法：
        K getKey（） V getValue（）
         */
        Set<Map.Entry<String ,Integer>>entrySet=map.entrySet();
        for (Map.Entry<String ,Integer>e :entrySet){
            String key=e.getKey();
            Integer value=e.getValue();
            System.out.println(key+":"+value);
        }
        System.out.println("=================================");
         /*
          JDK8之后提供了forEach方法，用lamnda表达式遍历
          */
        map.forEach((k ,v )-> System.out.println(k+":"+v));

        /*
        遍历所有的value
        Collection<V>values()
        将当前Map中所有的value以一个集合形式返回
         */
        Collection<Integer>values=map.values();
        values.forEach(v-> System.out.println("value:"+v));


    }
}
